package com.itheima.commons.utils;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.apache.commons.lang3.StringUtils;

import java.util.Date;
import java.util.Map;

public class JwtUtils {

    private static final int TOKEN_TIME_OUT = 50000000;//失效时间
//    private static final int TOKEN_TIME_OUT = 3_600;//失效时间
    private static final String TOKEN_SECRET = "itcast";//密钥

    //生成token
    public static String getToken(Map parms) {
        //jwt生成token

        return Jwts.builder()// 创建token
                .signWith(SignatureAlgorithm.HS512, TOKEN_SECRET)//密钥，C=A+B+算法+密钥。是为了验证A.B部分是否被人篡改
                .setClaims(parms)//写入数据
                .setExpiration(new Date(System.currentTimeMillis() + TOKEN_TIME_OUT))//失效时间
                .compact();
    }

    //解析tokne
    public static Claims getClaims(String token) {
        return Jwts.parser()
                .setSigningKey(TOKEN_SECRET)//解析密钥和家秘密钥一致
                .parseClaimsJws(token)//解析数据
                .getBody();
    }

    //验证token是否有效
    public static boolean verifyToken(String token) {

        if (StringUtils.isEmpty(token)) {
            return false;
        }

        try {
            Claims claims = Jwts.parser()
                    .setSigningKey(TOKEN_SECRET)
                    .parseClaimsJws(token)
                    .getBody();
        } catch (Exception e) {
            return false;
        }

        return true;
    }
}

